1
Concurrencia en el planeta rojo
AI017Lesson 8
00:00

La concurrencia en el planeta rojo es el arte de gestionar múltiples operaciones independientes—como la navegación del rover, la telemetría de signos vitales y las conexiones con satélites—sin que el sistema se detenga. En Go, una tarea ejecutándose de forma independiente se conoce como un goroutine.

1. El principio de no determinismo

Lo mejor es siempre asumir que las operaciones en diferentes goroutines pueden ejecutarse en cualquier orden. Debido a que el tiempo de ejecución de Go programa tareas en los núcleos disponibles, no podemos confiar en que un rover termine su escaneo antes de que otro comience su transmisión sin una sincronización explícita.

go printGopher(c) // Inicia una nueva tarea independiente

2. Mecanismos de sincronización

Para gestionar estas tareas, Go proporciona dos herramientas principales:

  • Exclusión mutua: Las goroutines pueden usar un mutex para excluirse mutuamente de hacer algo al mismo tiempo.
  • La instrucción select: Parece una sentencia switch donde cada caso contiene una recepción o envío de canal. select espera hasta que un caso esté listo y luego lo ejecuta.
Gestor de Gopher(Casco y portapapeles)SELECTRover AlphaRover Beta

3. El esqueleto del trabajador

Los trabajadores de larga duración típicamente utilizan un bucle infinito combinado con select para monitorear múltiples canales de comunicación simultáneamente:

func worker() {
for {
select {
// Esperar por canales aquí.
}
}
}
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>